#!/bin/bash

# 处理多模态文件并生成对应的消息结构
MULTIMODAL_MESSAGES=""

if [ ${#MULTIMODAL_FILES[@]} -gt 0 ]; then
  for filepath in "${MULTIMODAL_FILES[@]}"; do
    echo "$filepath"
  done
  echo
  read -p "确认上传这些多模态文件(图片)吗? [Y/n] " confirm_multimodal
  confirm_multimodal=${confirm_multimodal:-Y}
  
  if [[ "$confirm_multimodal" =~ ^[Yy]$ ]]; then
    # 构建qwen-image-edit专用的content数组
    CONTENT_ARRAY="[]"
    
    # 添加图片（最多3张）
    image_count=0
    for filepath in "${MULTIMODAL_FILES[@]}"; do
      # 只处理图片文件
      mime_type=$(file -b --mime-type "$(realpath "$filepath")")
      if [[ "$mime_type" =~ ^image/ ]]; then
        if [ $image_count -lt 3 ]; then  # qwen-image-edit最多支持3张图片
          base64_data=$(base64 -w 0 "$filepath")
	  # 创建包含完整image数据的临时JSON文件
	  temp_json_file=$(mktemp)
	  cat > "$temp_json_file" <<EOF
	  {
  		"image": "data:$mime_type;base64,$base64_data"
	  }
EOF

	  # 使用文件输入, 将图片添加到content数组，使用qwen-image-edit要求的格式
	  CONTENT_ARRAY=$(echo "$CONTENT_ARRAY" | jq --slurpfile new_item "$temp_json_file" '. += [$new_item[0]]')
# ### 语法和语义解释：
# 1. **`--slurpfile new_item "$temp_json_file"`**
#    - **语义**：将整个JSON文件内容读入一个变量中
#    - **语法**：`--slurpfile variable_name filename`
#    - **作用**：读取`$temp_json_file`文件的完整内容，存储到`$new_item`变量中
#    - **特点**：`slurpfile`会将文件内容作为数组读取，即使文件中只有一个JSON对象
# 2. **`. += [$new_item[0]]`**
#    - **`.`**：表示当前处理的JSON数据（这里是`$CONTENT_ARRAY`）
#    - **`+=`**：数组追加操作符
#    - **`[$new_item[0]]`**：
#      - `$new_item[0]`：取slurpfile读取的数组的第一个元素
#      - 用方括号`[]`包装，创建一个包含该元素的新数组
#    - **整体语义**：将新项目添加到现有内容数组的末尾
# ### 工作流程：
# 1. 从标准输入读取当前的`CONTENT_ARRAY`（JSON数组）
# 2. 将临时JSON文件内容读入`new_item`变量
# 3. 将`new_item`的第一个元素追加到数组中
# 4. 输出更新后的数组

	  rm -f "$temp_json_file"

          image_count=$((image_count+1))
        else
          echo "警告：qwen-image-edit最多支持3张图片，已跳过多余图片: $filepath" >&2
        fi
      else
        echo "警告：qwen-image-edit只支持图片文件，已跳过: $filepath" >&2
      fi
    done
    
    # 添加文本提示（必须有）
    if [ -n "$rfm_AI_MODEL_prompt" ]; then
      CONTENT_ARRAY=$(echo "$CONTENT_ARRAY" | jq --arg text "$rfm_AI_MODEL_prompt" '. += [{"text": $text}]')
    else
      echo "错误：qwen-image-edit必须提供文本编辑指令" >&2
      exit 1
    fi
    
    # 创建完整的消息对象（qwen-image-edit要求role必须是user）
    # 创建临时文件存储CONTENT_ARRAY
    temp_content_file=$(mktemp)
    echo "$CONTENT_ARRAY" > "$temp_content_file"

    # 使用文件输入创建消息对象
    MULTIMODAL_MESSAGES=$(jq -n --slurpfile content "$temp_content_file" '{role: "user", content: $content[0]}')
# 1. **使用临时文件**：将`CONTENT_ARRAY`写入临时文件，避免命令行长度限制
# 2. **`-n`选项**：使用null输入而不是从stdin读取
# 3. **`--slurpfile content`**：将整个CONTENT_ARRAY文件内容读入变量
# 4. **`$content[0]`**：取slurpfile数组的第一个元素（即整个CONTENT_ARRAY）
# 5. **直接构造对象**：使用`{role: "user", content: $content[0]}`直接创建目标JSON结构

    # 清理临时文件
    rm -f "$temp_content_file"

  fi
fi
